# Palindrome
# 字符串回文
# 从左往右读和从右往左读都一样的字符串 Palindrome

# 数字回文
# 从左往右读和从右往左读都一样的数字 Number Palindrome
# 121, 666, 8008
# 所有负数都不是数字回文
# 所有的单个数字都是回文

# is_number_palindrome(101) true
# is_number_palindrome(102) false
def is_number_palindrome(n):
  n = str(n)
  # 1 5 5 1
  # l     x
  l = 0
  x = len(n) - 1

  while x > l:
    if n[l] == n[x]:
      l += 1
      x -= 1
    if n[l] != n[x]:
      print("This is not a palindrome number.")
      return False
  
  print("This is a palindrome number.")
  return True

def is_number_palindrome1(n):
  return helper(str(n))

# 从 string 左边数第 l 位开始的字符串是不是回文
# a b d b a
# l = 0, r = len(s) - 1
# l = 1, r = len(s) - 1 - 1
# helper("abddb", 1) true
def helper(string, l = 0):
  r = len(string) - l - 1
  return True if l >= r else (string[l] == string[r] and helper(string, l + 1))
  
# 如何不把 n 变成字符串或者列表的情况下，直接判断 n 是否是回文数
'''
奇数个位数的数字
12321
L     R
1232  1
123   12
12    123

L < R 就不再拆了
L == R/10 是回文

偶数个位数的数字
1221
L      R
122    1
12     12

L == R 是回文

L < R 不是回文数字
'''
def is_number_palindrome2(n):
  # 12 % 10 = 2
  # 对于一个数字，对 10 取余数就能得到它的个位

  


